class Animal {
    public String name;//名字
    public int age;//年龄
    public float weight;//重量
    public void eat() {
        System.out.println(name + "正在吃饭");
    }
    public void sleep() {
        System.out.println(name + "正在睡觉");
    }
}
class Dog extends Animal {
    public void barks() {
        System.out.println(name + ": 旺旺旺~~~");
    }
}

class Cat extends Animal{
    void mew() {
        System.out.println(name + "喵喵喵~~~");
    }
}
//
//public class Test {
//    public static void main(String[] args) {
//        Dog Labrador = new Dog();
//        Labrador.name = "豆豆";
//        Labrador.color = "黑色";
//        Labrador.barks();
//        Labrador.wag();
//
//        Dog Husky = new Dog();
//        Labrador.name = "二哈";
//        Labrador.color = "黑白相间";
//        Labrador.barks();
//        Labrador.wag();
//    }
//}

//public class Base {
//    int a;
//    int b;
//}
//public class Derived extends Base{
//    int c;
//    public void method(){
//        a = 10; // 访问从父类中继承下来的a
//        b = 20; // 访问从父类中继承下来的b
//        c = 30; // 访问子类自己的c
//    }
//}
//public class Base {
//    int a;
//    int b;
//    int c;
//}
//public class Derived extends Base{
//    int a; // 与父类中成员a同名，且类型相同
//    char b; // 与父类中成员b同名，但类型不同
//    public void method(){
//        a = 100; // 访问父类继承的a，还是子类自己新增的a？
//        b = 101; // 访问父类继承的b，还是子类自己新增的b?
//        c = 102; // 子类没有c，访问的肯定是从父类继承下来的c
//// d = 103; // 编译失败，因为父类和子类都没有定义成员变量b
//    }
//}
//public class Base {
//    public void methodA(){
//        System.out.println("Base中的methodA()");
//    }
//}
//public class Derived extends Base{
//    public void methodB(){
//        System.out.println("Derived中的methodB()方法");
//    }
//    public void methodC(){
//        methodB(); // 访问子类自己的methodB()
//        methodA(); // 访问父类继承的methodA()
//        // methodD(); // 编译失败，在整个继承体系中没有发现方法methodD()
//    }
//}
//public class Base {
//    public void methodA(){
//        System.out.println("Base中的methodA()");
//    }
//    public void methodB(){
//        System.out.println("Base中的methodB()");
//    }
//}
//public class Derived extends Base{
//    public void methodA(int a) {
//        System.out.println("Derived中的method(int)方法");
//    }
//    public void methodB(){
//        System.out.println("Derived中的methodB()方法");
//    }
//    public void methodC(){
//        methodA(); // 没有传参，访问父类中的methodA()
//        methodA(20); // 传递int参数，访问子类中的methodA(int)
//        methodB(); // 直接访问，则永远访问到的都是子类中的methodB()，基类的无法访问到
//    }
//}

//public class Base {
//    int a;
//    int b;
//    public void methodA() {
//        System.out.println("Base中的methodA()");
//    }
//    public void methodB() {
//        System.out.println("Base中的methodB()");
//    }
//}
//public class Derived extends Base {
//    int a; // 与父类中成员变量同名且类型相同
//    char b; // 与父类中成员变量同名但类型不同
//    // 与父类中methodA()构成重载
//    public void methodA(int a) {
//        System.out.println("Derived中的method()方法");
//    }
//    // 与基类中methodB()构成重写(即原型一致，重写后序详细介绍)
//    public void methodB() {
//        System.out.println("Derived中的methodB()方法");
//    }
//    public void methodC() {
//// 对于同名的成员变量，直接访问时，访问的都是子类的
//        a = 100; // 等价于： this.a = 100;
//        b = 101; // 等价于： this.b = 101;
//// 注意：this是当前对象的引用
//// 访问父类的成员变量时，需要借助super关键字
//// super是获取到子类对象中从基类继承下来的部分
//        super.a = 200;
//        super.b = 201;
//// 父类和子类中构成重载的方法，直接可以通过参数列表区分清访问父类还是子类方法
//        methodA(); // 没有传参，访问父类中的methodA()
//        methodA(20); // 传递int参数，访问子类中的methodA(int)
//// 如果在子类中要访问重写的基类方法，则需要借助super关键字
//        methodB(); // 直接访问，则永远访问到的都是子类中的methodA()，基类的无法访问到
//        super.methodB(); // 访问基类的methodB()
//    }
//}

//public class Base {
//    public Base(){
//        System.out.println("Base()");
//    }
//}
//public class Derived extends Base{
//    public Derived(){
//        super(); // 注意子类构造方法中默认会调用基类的无参构造方法：super(),
//                 // 用户没有写时,编译器会自动添加，而且super()必须是子类构造方法中第一条语句，
//                 // 并且只能出现一次
//        System.out.println("Derived()");
//    }
//}
//public class Test {
//    public static void main(String[] args) {
//        Derived d = new Derived();
//    }
//}